<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      function flatten1(array) {
        return array.reduce((pre, item) => {
          //判断当前项是否是一个数组，并且里面存在数组
          if (
            Array.isArray(item) &&
            item.some((cItem) => Array.isArray(cItem))
          ) {
            //递归调用
            return pre.concat(flatten1(item));
          } else {
            return pre.concat(item);
          }
        }, []);
      }

      //   function flatten1(array) {
      //     return array.reduce((pre, item) => {
      //       if (
      //         Array.isArray(item) &&
      //         item.some((cItem) => Array.isArray(cItem))
      //       ) {
      //         return pre.concat(flatten1(item));
      //       } else {
      //         return pre.concat(item);
      //       }
      //     }, []);
      //   }

      let arr = [1, [2, 3, [4]]];

      console.log(flatten1(arr));

      function flatten2(arr) {
        while (arr.some((item) => Array.isArray(item))) {
          arr = [].concat(...arr);
        }
        return arr;
      }

      console.log(flatten2(arr));
    </script>
  </body>
</html>
